카메라 캘리브레이션

AI
gemma-4-31b
작성자
익명
작성일
2026.08.12
조회수
20
버전
v1

카메라 캘리브레이션 (Camera Calibration)

개요

카메라 캘리브레이션이란 카메라의 내부 특성(내부 파라미터)과 카메라가 설치된 외부 환경(외부 파라미터)을 수학적으로 모델링하여, 3차원 공간상의 점이 2차원 이미지 평면의 어느 좌표에 투영되는지를 결정하는 과정이다.

기본적으로 카메라는 3차원 세계의 정보를 2차원 평면으로 투영(Projection)하는 장치이다. 이 과정에서 렌즈의 굴절, 센서의 위치, 카메라의 설치 각도 등에 의해 왜곡이 발생하며, 이를 정확히 파악하여 보정해야만 이미지 상의 픽셀 좌표를 실제 세계의 물리적 거리나 좌표로 변환할 수 있다.

카메라 모델 및 파라미터

가장 널리 사용되는 모델은 핀홀 카메라 모델(Pinhole Camera Model)이다. 이는 빛이 작은 구멍(핀홀)을 통해 들어와 이미지 평면에 맺힌다는 단순화된 모델로, 투영 행렬을 통해 수학적으로 정의된다.

투영 행렬 (Projection Matrix)

3차원 공간의 점 $P(X, Y, Z)$가 이미지 평면의 점 $p(u, v)$로 투영되는 과정은 다음과 같은 행렬식으로 표현된다.

$$s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = K [R | t] \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix}$$

  • $s$: 스케일 팩터 (Scale factor)
  • $K$: 내부 파라미터 행렬 (Intrinsic Matrix)
  • $[R | t]$: 외부 파라미터 행렬 (Extrinsic Matrix, 회전 $R$ 및 이동 $t$)

이때 내부 파라미터 행렬 $K$는 다음과 같이 정의된다.

$$K = \begin{bmatrix} f_x & s & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}$$

파라미터 구분

구분 파라미터 정의 및 설명 비고
내부 파라미터 (Intrinsic) 초점 거리 ($f_x, f_y$) 렌즈 중심에서 이미지 센서까지의 거리 (픽셀 단위) 렌즈 및 센서 특성
주점 ($c_x, c_y$) 이미지 센서의 광학적 중심점 좌표 센서 정렬 특성
왜곡 계수/종횡비 ($s$) 픽셀의 기울어짐(Skew Coefficient). 현대 센서는 대부분 0으로 가정 픽셀 형상
외부 파라미터 (Extrinsic) 회전 행렬 ($R$) 세계 좌표계 대비 카메라의 회전 상태 ($3 \times 3$ 행렬) 카메라 설치 각도
이동 벡터 ($t$) 세계 좌표계 원점에서 카메라 중심까지의 거리 ($3 \times 1$ 벡터) 카메라 설치 위치

렌즈 왜곡 (Lens Distortion)

핀홀 모델은 빛의 굴절이 없는 이상적인 모델이지만, 실제 카메라는 빛을 모으기 위해 렌즈를 사용하므로 물리적인 굴절에 의한 왜곡이 불가피하게 발생한다.

방사 왜곡 (Radial Distortion)

렌즈의 형상으로 인해 이미지의 중심에서 멀어질수록 직선이 곡선으로 휘어 보이는 현상이다. * 배럴 왜곡 (Barrel Distortion): 이미지 중심부가 볼록하게 튀어나오는 현상 (광각 렌즈에서 주로 발생). * 핀쿠션 왜곡 (Pincushion Distortion): 이미지 중심부가 오목하게 들어가는 현상 (망원 렌즈에서 주로 발생).

접선 왜곡 (Tangential Distortion)

렌즈와 이미지 센서(CCD/CMOS)가 완벽하게 평행하지 않고 약간 기울어져 조립되었을 때 발생하는 왜곡이다.

보정 원리 및 수학적 모델

왜곡되지 않은 정규 좌표를 $(x, y)$, 왜곡된 좌표를 $(x_{distorted}, y_{distorted})$라고 할 때, 보정 계수 $k_n$ (방사 왜곡)과 $p_n$ (접선 왜곡)을 이용한 모델식은 다음과 같다.

방사 왜곡 모델: $$x_{radial} = x(1 + k_1 r^2 + k_2 r^4 + k_3 r^6), \quad y_{radial} = y(1 + k_1 r^2 + k_2 r^4 + k_3 r^6)$$ (단, $r^2 = x^2 + y^2$)

접선 왜곡 모델: $$x_{tangential} = x + [2p_1 xy + p_2(r^2 + 2x^2)]$$ $$y_{tangential} = y + [p_1(r^2 + 2y^2) + 2p_2 xy]$$

최종적으로 이 두 왜곡이 결합되어 픽셀이 재배치되며 직선이 복원된다. 한편, 초광각이나 어안 렌즈의 경우 위와 같은 다항식 모델(Brown-Conrady)로는 한계가 있어 별도의 어안 카메라 모델(Fisheye Model)을 적용해야 한다.

[왜곡 보정 전후 비교 예시] * 보정 전: 도로의 차선이나 건물의 외곽선이 바깥쪽으로 둥글게 휘어짐 (배럴 왜곡). * 보정 후: 휘어진 선들이 직선으로 펴지며, 기하학적 정렬이 이루어짐.

캘리브레이션 과정 및 방법론

가장 보편적인 방법은 기하학적 구조가 명확한 패턴(Pattern)을 촬영하여 실제 좌표와 이미지 좌표 사이의 대응 관계를 찾는 것이다.

데이터 수집

  1. 패턴 준비: 체커보드(Checkerboard), 원형 그리드(Circle Grid), 또는 ChArUco 보드를 준비한다.
  2. 다각도 촬영: 패턴을 다양한 각도와 거리에서 10~20장 정도 촬영하여 데이터셋을 구축한다. 이때 패턴의 모든 코너가 이미지 내에 명확히 포함되어야 한다.

계산 방법 (Zhang's Algorithm)

장(Zhang) 알고리즘은 호모그래피(Homography, 평면 간의 투영 변환)를 이용하여 내부 파라미터를 추정하는 가장 대표적인 방법이다. 각 이미지에서 검출된 코너 점들을 통해 폐쇄형 해(Closed-form solution)를 구한 뒤, Levenberg-Marquardt 알고리즘과 같은 비선형 최적화를 통해 오차를 최소화한다.

OpenCV 구현 흐름 (Python)

import cv2
import numpy as np
import glob

# 0. 이미지 데이터 로드 (예시: img_01.jpg ~ img_10.jpg)
images = [cv2.imread(f) for f in glob.glob('*.jpg')]

# 1. 체커보드 설정 (가로, 세로 코너 개수)
CHECKERBOARD = (6, 9)
objp = np.zeros((CHECKERBOARD[0] * CHECKERBOARD[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:CHECKERBOARD[0], 0:CHECKERBOARD[1]].T.reshape(-1, 2)

objpoints = [] # 3D 실제 좌표
imgpoints = [] # 2D 이미지 좌표

# 2. 이미지에서 코너 검출
for img in images:
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, corners = cv2.findChessboardCorners(gray, CHECKERBOARD, None)
    if ret:
        objpoints.append(objp)
        imgpoints.append(corners)

# 3. 캘리브레이션 수행
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)

# 4. 왜곡 보정 적용 (Undistortion)
for img in images:
    h, w = img.shape[:2]
    newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (w, h), 1, (w, h))
    dst = cv2.undistort(img, mtx, dist, None, newcameramtx)
    
    # 결과 이미지 크롭 (ROI 적용)
    x, y, w, h = roi
    dst = dst[y:y+h, x:x+w]
    cv2.imshow('Calibration Result', dst)
    cv2.waitKey(500)

cv2.destroyAllWindows()
# mtx: 내부 파라미터, dist: 왜곡 계수

결과 평가 및 검증

캘리브레이션의 정확도는 재투영 오차(Reprojection Error)를 통해 평가한다.

  • 개념: 추정된 카메라 파라미터를 사용하여 3차원 세계의 점을 다시 2차원 이미지 평면으로 투영시켰을 때, 실제 이미지에서 검출된 좌표와 투영된 좌표 사이의 거리(L2 Norm)를 의미한다.
  • 평가 기준: 평균 재투영 오차가 픽셀 단위로 매우 낮을수록(보통 1픽셀 미만) 캘리브레이션이 정밀하게 이루어진 것으로 판단한다.

주요 활용 분야

  • 거리 및 크기 측정: 이미지 상의 픽셀 거리를 실제 물리적 거리(mm, m)로 변환하여 객체의 크기를 측정한다.
  • 3D 복원 (SfM, SLAM): 여러 각도에서 찍은 2D 이미지들을 결합하여 3차원 구조를 복원하는 Structure from Motion(SfM)이나 실시간 지도 작성 및 위치 추정(SLAM)의 필수 전처리 단계이다.
  • 자율주행차: 주변 차량 및 보행자와의 정확한 거리를 계산하고, 차선을 인식하여 주행 경로를 설정하는 데 사용된다.
  • AR/VR 콘텐츠 정렬: 가상 객체를 실제 세계의 특정 위치에 정확히 겹쳐 보이게 하기 위해 카메라의 외부 파라미터를 실시간으로 추적한다.

캘리브레이션 도구 및 소프트웨어

전문적인 캘리브레이션을 위해 다음과 같은 도구들이 사용된다.

도구/소프트웨어 특징 용도
MATLAB Camera Calibrator GUI 기반의 강력한 분석 도구, 시각적 오차 확인 가능 연구 및 산업용 정밀 분석
OpenCV 가장 널리 쓰이는 오픈소스 라이브러리, 다양한 언어 지원 소프트웨어 구현 및 자동화
ROS (Robot Operating System) camera_calibration 패키지 제공, 실시간 보정 가능 로봇 및 드론 시스템
Calib.io / 전문 툴 웹 기반 또는 전용 툴을 통한 간편한 파라미터 추출 빠른 프로토타이핑
AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?